package com.jungle.sp.daily.util;

import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;

import java.util.HashSet;
import java.util.Set;
@Slf4j
public class UniqueRandomStringExample {
    public static void main(String[] args) {
        Set<Object> set = new HashSet<>();
        // 调用生成不重复的字符串的方法
        for (int i = 0; i < 1000000; i++) {
            String uniqueStr = generateUniqueString1(10);
            log.info("==>{}",uniqueStr);
            set.add(uniqueStr);
        }

        
        System.out.println(set.size());
    }

    /**
     * 生成不重复的10位字符串
     */
    public static String generateUniqueString(int length) {
        // 生成唯一的UUID
        String uuid = IdUtil.fastSimpleUUID();  // 生成简单UUID（无横线）
        
        // 取出前 length 位，确保不会重复
        return StrUtil.sub(uuid, 0, length);
    }


    /**
     * 生成不重复的10位字符串，包含字母、数字和下划线
     */
    public static String generateUniqueString1(int length) {
        // 定义字符集，包含数字、大小写字母和下划线
        String charSet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_";

        // 生成唯一的UUID，作为种子
        String uuid = IdUtil.fastUUID().replace("-", "");

        // 生成一定长度的随机字符串
        String randomStr = RandomUtil.randomString(charSet, length - 4);  // 取length - 4位随机字符串

        // 将UUID的后4位和随机字符串拼接，保证唯一性
        String uniqueStr = randomStr + uuid.substring(uuid.length() - 4);

        return uniqueStr;
    }
}
